import { getBasicData } from '@/api/declare.js'

// 分页size
const page = {
    pageNum: 1,
    pageSize: 6000
}

// 订单模块&通关模块获得基础数据通用方法
function getDicCommonFn (dataMainType) {
    return getBasicData({
        pageNum: page.pageNum,
        pageSize: page.pageSize,
        dataMainType: dataMainType
    })
}

/**
 * 根据 dataMainType 数组 依次获取字典数据 并缓存到 localStorage
 * @param {Array} keys dataMainType数组
 */
function queryDicBeyKeys (keys) {
    return Promise.all(keys.map(k => getDicByKey(k)))
}

// 订单模块&通关模块数据字典
export default function () {
    // 数据量较大的字典
    // 500kb ~
    let bigKeys = [
        'PORT',
        'ORIGIN_AREA', // 原产地数据字典
        'DEST_CODE' // 目的地代码数据字典
    ]
    // 200kb ~ 500kb
    let midKeys = [
        'INLAND_REGION', // 境内目的地
        'CUSTOMS_CODE',
        'INSIDE_PORT',
        'IAQO_CODE' // 机关数据字典
    ]
    // 0 ~ 200kb
    let smallKeys = [
        'TRAF_MODE',
        'TRADE_MODE',
        'CUT_MODE',
        'TRANS_MODE',
        'PACKAGE_TYPE',
        'UNIT',
        'CURRENCY_CODE',
        'COUNTRY_REGION', // 国家
        'DUTY_MODE',
        'CONTAINER_TYPE', // 集装箱规格
        'SUPERVISION', // 获得随附单证代码数据字典
        'ENTRY_TYPE' // 报关单类型
    ]
    return new Promise((resolve, reject) => {
        queryDicBeyKeys(smallKeys).then(res => {
            resolve()
            Promise.resolve().then(() => {
                queryDicBeyKeys(midKeys).then(res => {
                    queryDicBeyKeys(bigKeys).then(res => {
                    })
                })
            })
        }).catch(err => {
            resolve()
        })
    })
}

export function getDicByKey (key) {
    return new Promise((resolve, reject) => {
        const list = window.localStorage.getItem(key)
        if (list) {
            resolve(JSON.parse(list))
        } else {
            getDicCommonFn(key).then(res => {
                let list = res.data.code === '0000' && res.data.data.list || []
                resolve(list)
                // 缓存本地数据
                if (list.length) {
                    Promise.resolve().then(() => {
                        window.localStorage.setItem(key, JSON.stringify(list))
                    })
                }
            }).catch(err => {
                reject(err)
            })
        }
    })
}
